/**
 * @brief MutableTimer 时间间隔值可以变化的定时器
 * date:2023/12/18 
 * author:Coolio
 */

#ifndef MutableTimer_h
#define MutableTimer_h

#include <stdio.h>
#include <functional>
#include "EventPoller.h"
using namespace std;

namespace toolkit {

class MutableTimer {
public:
    typedef std::shared_ptr<MutableTimer> Ptr;

    /**
     * 构造定时器
     * @param second 定时器重复秒数
     * @param cb 定时器任务，返回true表示重复下次任务，否则不重复，如果任务中抛异常，则默认重复下次任务
     * @param poller EventPoller对象，可以为nullptr
     * @param continueWhenException 定时回调中抛异常是否继续标记
     */
    MutableTimer(float second,
          const function<bool()> &cb,
          const EventPoller::Ptr &poller /*=nullptr*/,
          bool continueWhenException = true );
    /**
     * 仅仅是更改定时的时间间隔
     * @param second 定时器新的重复秒数
     */
    void UpdateInterval(float second);
    ~MutableTimer();
private:
    weak_ptr<DelayTask> _tag;
    float           _interval_second;//间隔的秒数,保存为变量,达到可以动态修改的目的
    //定时器保持EventPoller的强引用
    EventPoller::Ptr _poller;
};

}  // namespace toolkit
#endif /* MutableTimer_h */

